<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Security Class : CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript" src="../nav/user_guide_menu.js"></script>

<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='ExpressionEngine Dev Team' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle_darker.jpg" width="154" height="43" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 2.0.3</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
Security Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content"> 
  <h1>보안 클래스</h1>  <p>보안클래스는 입력 값을 안전히 처리하여, 보다 안전한 프로그램을 만드는데 도움이 되는 메서드들을 제공합니다.</p>  <h2>XSS 필터링</h2>
  <p>CodeIgniter에서는 크로스 사이트 스크립팅 공격을 방지하기 위해 모든 POST 와 COOKIE 데이터를 자동으로 필터링 할 
    수도 있고, 개별 아이템별로 필터링 할 수도 있습니다. 전역적으로 동작하지 않는것이 기본값입니다.왜냐하면, 처리시 약간의 오버헤드가 
    존재하기도 하고, 개발자에게 선택권을 주기 위해서 입니다.</p>  <p>XSS 필터는 자바스크립트실행을 시도한다거나, 쿠키를 하이재킹한다거나, 다른 해괴망측한 짓거리들을 한다거나 하는것을 막는 기술입니다.만약 
    금지된 문자나 코드(위 짓거리들을 하려는)등을 찾으면 데이터를 안전한 HTML 엔터티로 변환하여 표시합니다. </p>
  <p> 안내: 이기능은 입력데이터 처리용으로만 사용하세요 . 처리시 오버헤드가 심해질수 있으므로(시스템 리소스 많이먹음) 다른 처리에서는 
    사용하지 않는것이 좋습니다.</p>
  <p>XSS필터를 이용하여 필터하려면 아래 함수를 사용하세요:</p>

<h2>$this->security->xss_clean()</h2>  <p>사용예:</p>
  <code>$data = $this->security->xss_clean($data);</code> 
  <p>항상 자동으로 POST 및 COOKIE 데이터를 필터링하려면 <kbd>application/config/config.php</kbd> 
    를 열고 다음과 같이 설정하십시오.</p>
  <p><code>config['global_xss_filtering'] = TRUE;</code> </p>
  <p>안내: form validation 클래스에도 XSS 필터링 기능을 사용할 수 있는 옵션이 있습니다.</p>  <p>옵션으로 제공되는 두번째 파라미터 <dfn>is_image</dfn>는 이미지를 검사하여 잠재적 XSS 공격을 방지합니다. 파일업로드시 
    유용합니다. 두번째 파라미터가 <dfn>TRUE</dfn>이면 처리된 문자열을 반환하는 대신 이미지가 안전한 경우 TRUE를, 악의적인 
    정보가 포함된 경우 FALSE를 반환합니다.</p>

<code>if ($this->security->xss_clean($file, TRUE) === FALSE)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;// file failed the XSS test<br />
}</code>


<h2>$this->security->sanitize_filename()</h2>  
  <p>사용자 입력에서 파일이름을 입력받을 경우 디렉토리 탐색이나 다른 보안문제를 해결하기 위해서 소독과정을 거치는것이 좋습니다.(손소독 
    아님 ㅎㅎ). <dfn>sanitize_filename()</dfn> 메서드를 이용하여 파일이름을 소독하세요. 예:</p>

<code>$filename = $this->security->sanitize_filename($this->input->post('filename'));</code>

  <p>파일이름에 상대경로가 포함되는걸 허용할 경우 (예:<kbd>file/in/some/approved/folder.txt</kbd>) 
    두번째 파라미터<samp>$relative_path</samp> 를TRUE로 설정하세요.</p>
  <code>$filename = $this->security->sanitize_filename($this->input->post('filename'), 
  TRUE);</code> 
  <!-- @todo write docs for CSRF methods -->
  <h2>크로스 사이트 요청 위조 Cross-site request forgery (CSRF)</h2>
  <p>CSRF 보호를 활성화하려면 <kbd>application/config/config.php</kbd> 를 열고 다음과 같이 설정합니다:</p>
  <code>$config['csrf_protection'] = TRUE;</code> 
  <p><a href="../helpers/form_helper.html">폼헬퍼(form helper</a>)의 <var>form_open()</var> 
    함수를 사용하면 폼의 CSRF 보호를위한 hidden 필드가 자동으로 삽입됩니다.</p>
  <p>&nbsp;</p>

</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="pagination.html">Pagination Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="sessions.html">Session Class</a>
</p>
<p><a href="http://codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2006 - 2011 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">EllisLab, Inc.</a></p>
</div>

</body>
</html>